#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

// c
// struct Stack
//{
//	int* a;
//	int top;
//	int capacity;
//};
//
// void StackInit(struct Stack* ps);
// void StackPush(struct Stack* ps, int x);

// C++兼容c语言struct的所有用法
// struct同时升级成了类
// 1、类名就是类型，Stack就是类型，不需要加struct
// 2、类里面定义函数
// struct Stack
//{
//	int* a;
//	int top;
//	int capacity;
//
//	void Init()
//	{
//		a = 0;
//		top = 0;
//		capacity = 0;
//	}
//
//	void Push(int x)
//	{
//		//...
//	}
//};
//
// struct Queue
//{
//	// ...
//
//	void Init()
//	{
//
//	}
//};
//

// struct ListNode
//{
//	ListNode* next;//C++可以直接这样
//	int val;
// };

// class Stack
//{
// private://不写 这一部分是私有，最好写上
//	int* a;
//	int top;
//	int capacity;
//
// public:
//	void Init()
//	{
//		a = 0;
//		top = 0;
//		capacity = 0;
//	}
//
//	void Push(int x)
//	{
//		//...
//	}
//
//	bool Empty()
//	{
//		return top == 0;
//	}
// };
//
//// 20:12继续
// int main()
//{
//	Stack s1;
//	s1.Init();
//	s1.Push(1);
//	s1.Push(2);
//	s1.Push(3);
//	s1.Push(4);
//
//	//if(s1.top == 0)
//	if (s1.Empty())
//	{
//
//	}
//
//	//s1.a = 0;
//
//	/*
//	struct Stack s1;
//	StackInit(&s1);
//	StackPush(&s1, 1);
//	StackPush(&s1, 2);
//	StackPush(&s1, 3);*/
//	//if (s1.top == 0)
//	/*if (!StackEmpty(&s))
//	{}*/
//
//	return 0;
// }

//										大小计算
// class Date
//{
// public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	private:
//		// 声明
//
//
//	//一般C++成员前面加_都代表是内部的
//	int _year;
//	int _month;
//	int _day;
//};
//
//
//
// class A
//{
// private:
//	char _ch;
//	int _a;
//};
//
// class B
//{};
//
// class C
//{
// public:
//	void f()
//	{};
//};
//
////   类  和 对象   1v多
//// 设计图   房子
// int main()
//{
//	Date d1;
//	Date d2;
//	Date d3;
//	d1.Init(2023, 10, 7);
//	d2.Init(2022, 10, 7);
//	d1._year++;
//	d2._year++;
//
//
//	cout << sizeof(d1) << endl;
//	cout << sizeof(A) << endl;
//
//	B b1;
//	B b2;
//
//	cout << sizeof(B) << endl;
//	cout << sizeof(C) << endl;
//
//	//// 无成员变量的类，对象大小开一个字节，这个字节不存储有效数据
//	//// 标识定义的对象存在过
//	cout << &b1 << endl;
//	cout << &b2 << endl;
//
//	return 0;
// }

//							this 指针

// this指针是一个隐含于每个非静态成员函数中的特殊指针。它指向调用该成员函数的对象的地址。尽管在代码中我们不会显式地看到或使用this指针，
// 但编译器在编译成员函数时会自动处理它。

class Date
{
public:
    // 初始化日期成员变量的公有成员函数
    void Init(int year, int month, int day)
    {
        _year = year;   // 将传入的year赋值给当前对象的_year成员变量
        _month = month; // 将传入的month赋值给当前对象的_month成员变量
        _day = day;
    }

    void Print()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }

    // void Print(Date* this)
    //{
    //	cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
    // }
private:
    int _year; // 私有成员变量，用于存储年份
    int _month;
    int _day;
};

class A
{
private:
    char _ch;
    int _a;
};

int main()
{
    Date d1;
    Date d2;

    d1.Init(2023, 10, 7);
    d2.Init(2022, 10, 7);

    // 不能显示地写this相关实参和形参
    d1.Print();
    d2.Print();
    // 编译器认为是这样：
    // d1.Print(&d1);
    // d2.Print(&d2);
    return 0;
}